Skip to content

Codeforces 错题记录

141A

错点:

cpp
auto pos=letters.find(gname[i]);
if (pos==letters.end()){  // 错误

其中,string::find()返回的类型是size_t的位置索引,而不是迭代器。找不到时应该与string::npos比较,而不是end()

169A

错点:upper_bound使用方式错误

cpp
auto it = h.upper_bound(h.begin(), h.end(), i);  // 错误

vector 没有 upper_bound 成员函数

应该直接改为

cpp
auto it = upper_bound(h.begin(), h.end(), i);

实际上后来发现不需要用到upper_bound

错点:

cpp
    for (int i=0;i<n;i++) {
        h.emplace_back(cin);//错误
    }

不能这样输入。

cpp
//方式1
int j;
cin>>j;
h.emplace_back(j);
//因为整数是基本类型,拷贝的成本比较低,所以这么做不太会导致效率低下

//方式2(个人喜欢)
h.resize(n);
for (auto& x:h) cin>>x;

291A

**错点:**访问越界

cpp
for (int i=0;i<n;i++){//应改为i<n-1
        if (id[i]==0)
            continue;
        if (i<n-1&&id[i+2]==id[i]){//应改为i<n-2
            cout<<-1;
            return 0;
        }
        if (id[i+1]==id[i]){
            sum++;
            i++;
        }
    }